package com.ruoyi.delivery.mapper;

import com.ruoyi.delivery.domain.DelTransportOrder;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface DelTransportOrderMapper {
    /**
     * 根据条件筛选运输订单（支持分页）
     * @param logisticId 物流ID
     * @param trackingNumber 运单号（支持模糊搜索）
     * @param origin 发货地（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param startDate 出发时间范围的起始日期
     * @param endDate 出发时间范围的结束日期
     * @param state 运单状态
     * @param customerType 客户类型
     * @param offset 分页偏移量
     * @param pageSize 每页记录数
     * @return 满足条件的运输订单列表
     */
    List<DelTransportOrder> filterTransportOrders(
            @Param("logisticId") String logisticId,
            @Param("trackingNumber") String trackingNumber,
            @Param("origin") String origin,
            @Param("destination") String destination,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate,
            @Param("state") String state,
            @Param("customerType") String customerType,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize
    );

    /**
     * 根据条件获取运输订单总数
     * @param logisticId 物流ID
     * @param trackingNumber 运单号（支持模糊搜索）
     * @param origin 发货地（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param startDate 出发时间范围的起始日期
     * @param endDate 出发时间范围的结束日期
     * @param state 运单状态
     * @param customerType 客户类型
     */
    int getTransportOrderCount(
            @Param("logisticId") String logisticId,
            @Param("trackingNumber") String trackingNumber,
            @Param("origin") String origin,
            @Param("destination") String destination,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate,
            @Param("state") String state,
            @Param("customerType") String customerType);

    /**
     * 插入运输订单
     * @param order 运输订单对象
     * @return 受影响的行数
     */
    int insertTransportOrder(DelTransportOrder order);

    /**
     * 删除运输订单
     * @param trackingNumber 运单号
     * @return 受影响的行数
     */
    int deleteTransportOrder(@Param("trackingNumber") String trackingNumber);

    /**
     * 修改运输订单
     * @param order 运输订单对象
     * @return 受影响的行数
     */
    int updateTransportOrder(DelTransportOrder order);

    /**
     * 确认运输订单单 将运输订单状态从0更新为2
     * @param tracking_number, state, updated_date,updated_person
     * @return 更新影响的行数
     */
    int updateTransportOrderState(@Param("trackingNumber") String tracking_number, @Param("state") String state, @Param("updatedPerson") String updated_person);

    DelTransportOrder getTransportOrderByTrackingNumber(@Param("trackingNumber") String trackingNumber);

    /**
     * 更新预期到货时间和变更标记
     * @param trackingNumber 运单号
     * @param departureDate 新的预期到货时间
     * @param updatedPerson 修改人
     */
    void updateExpectedArrivalTime(@Param("trackingNumber") String trackingNumber,
                                   @Param("departureDate") String departureDate,
                                   @Param("updatedPerson") String updatedPerson);
}
